import re

from django.contrib.auth import authenticate, login
from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
import json

# Create your views here.
from text.apps.users.models import User


class LoginView(View):
    # 使用用户名登录
    def post(self,request):
        # 1、获取前端传递的用户数据,是json格式,类型是bytes
        json_data = request.body.decode()
        # 2、将json数据转化为字典数据
        dict_data = json.loads(json_data)
        # 3、从字典中提取用户名字段数据，密码字段数据，记住密码状态数据
        username = dict_data.get('username')
        password = dict_data.get('password')
        remembered = dict_data.get('remembered')
        # 4、验证数据
        # 4-1 验证数据完整性
        if not all([username, password]):
            return JsonResponse({'code': 400, 'errmsg': '参数缺失'}, status=400)
        # 4-2判断username是用户名还是手机号
        if re.match(r'^1[3-9]\d{9}$', username):
            mobile = username
            #  查找该手机号对应的用户名
            username = User.objects.filter(mobile = mobile)
        # 4-3 验证用户名是否存在
        user = authenticate(request, username=username, password=password)

        # 判断是否为空,如果为空,返回
        if not user:
            return JsonResponse({'code': 400, 'errmsg': '用户名或者密码错误'})
        # 5、数据验证没有问题，用户存在则登录成功进行状态保持
        login(request,user)
        # 6、返回结果，返回时根据记住密码状态数据，进行session数据的有效期设置
        response = JsonResponse({'code': 0, 'errmsg': 'ok'})
        if remembered:
            # 记住密码，设置session有效期为两周
            request.session.set_expiry(None)
            response.set_cookie('username',user.username,max_age=60*60*24*14)
        if not remembered:
            request.session.set_expiry(0)
            response.set_cookie('username',user.username)

        return response


